package org.demo.es.service;

import java.util.List;

/**
 * SearchService接口
 * 用于定义ElasticSearch的文档的查询操作
 * @author moxiaoli
 */
public interface SearchService {

    /**
     * 查询文档
     * @param index 索引名称
     * @param keyword 关键字
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocumentByKeyword(String index, String keyword, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param from 开始位置
     * @param size 查询数量
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, int from, int size, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param sort 排序语句 例如：{"id":"desc"}
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, String sort, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param sort 排序语句 例如：{"id":"desc"}
     * @param from 开始位置
     * @param size 查询数量
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, String sort, int from, int size, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param sort 排序语句 例如：{"id":"desc"}
     * @param highlight 高亮语句 例如：{"name":{}}
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, String sort, String highlight, Class<T> clazz);

    /**
     * 查询文档
     * @param index 索引名称
     * @param query 查询语句 例如：{"match_all":{}}
     * @param sort 排序语句 例如：{"id":"desc"}
     * @param highlight 高亮语句 例如：{"name":{}}
     * @param from 开始位置
     * @param size 查询数量
     * @param clazz 文档类型
     * @return 文档数据列表
     */
    <T> List<T> searchDocument(String index, String query, String sort, String highlight, int from, int size, Class<T> clazz);
}
